//图的m着色问题 只能得90分
#include <iostream>
#include <vector>
using namespace std;
const int MAXN=100;
const int MAXM=10;
vector<int> G[MAXN+1];
int n,k,m;
bool flag[MAXN+1][MAXM+1];
int total;
void search(int u){
    if (u>n) total++;
    else {
        int flagbackup[n];
        for(int c=1;c<=m;c++){
            if (!flag[u][c]){
                int s=G[u].size();
                for(int k=0;k<s;k++){
                    int v=G[u][k];
                    flagbackup[v]=flag[v][c];
                    flag[v][c]=true;
                }
                search(u+1);
                for(int k=0;k<s;k++){
                    int v=G[u][k];
                    flag[v][c]=flagbackup[v];
                }
            }
        }
    }
}
int main()
{
    cin>>n>>k>>m;
    for(int i=1;i<=k;i++){
        int u,v;
        cin>>u>>v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    search(1);
    cout<<total;
} 
